package com.ce.pms.house.dao;

import java.util.List;

import com.ce.pms.base.dao.IPmsBaseDao;
import com.ce.pms.house.model.CoalitionHouseDomain;
import com.ce.pms.house.model.FlatDomain;
import com.ce.pms.house.model.HouseDomain;
import com.ce.pms.house.model.HousePlan;
import com.ce.pms.house.model.HouseType;
import com.ce.pms.house.vo.HouseSearchVO;
import com.sitechasia.webx.core.support.Page;

public interface IHouseDao extends IPmsBaseDao<HouseDomain> {
	/**
	 *
	 * 功能描述: 检查指定楼盘期数下的id不是houseId的指定房号的产权房是否存在
	 *
	 * @author 付湘辉
	 * Created on:2008-7-1
	 *
	 * 修改原因：
	 *
	 * @param projectId
	 * @param houseId
	 * @param houseNumber
	 *
	 * @return boolean true 存在　false 不存在
	 */
	public boolean checkIsOnlyNumber(Long projectId,Long houseId,String houseNumber);

	/**
	 *
	 * 功能描述: 检查指定楼盘期数下的指定房号的产权房是否存在
	 *
	 * @author 付湘辉
	 * Created on:2008-7-1
	 *
	 * 修改原因：
	 *
	 * @param projectId
	 * @param houseNumber
	 * @return boolean true 存在　false 不存在
	 */
	public boolean checkIsOnlyNumber(Long projectId,String houseNumber);

   /**
 *
 * 功能描述: 检查指定房号的产权房是否存在
 *
 * @author 付湘辉
 * Created on:2008-7-1
 *
 * 修改原因：
 *
 * @param projectId
 * @param houseNumber
 * @return boolean true 存在　false 不存在
 */
public boolean checkIsOnlyNumber(String houseNumber);

	/**
	 * 功能描述: 根据指定的房屋ID集合查询楼栋的数量 <br>
	 * @param houseIdStr
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-7-31  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Integer getBuildingCountBy(String houseIdStr);

	/**
    * 功能描述:查找指定房号的所有业主<br>
    * @param houseId
    * @return<br>
    * Create author:罗军林<br>
    * Create on:2008-10-14<br>
    * Edit author:<br>
    * Edit on:<br>
    * Why:<br>
    */
   public String getClientsByHouseId(Long houseId);

	/**
    *
    * 功能描述:  获取指定产权房屋的管理房 <br>
    *
    * @param houseDomain
    * @return
    *
    * Create author：付湘辉  <br>
    * Create on:2008-7-25  <br>
    * Edit author：  <br>
    * Edit on:    <br>
    * Why:     <br>
    */
   public CoalitionHouseDomain getCoalition(HouseDomain houseDomain);
	/**
	   *
	   * 功能描述:  获取指定产权房屋的管理房实体 <br>
	   *
	   * @param houseDomain
	   * @return
	   *
	   * Create author：付湘辉  <br>
	   * Create on:2008-7-25  <br>
	   * Edit author：  <br>
	   * Edit on:    <br>
	   * Why:     <br>
	   */
	  public CoalitionHouseDomain getCoalition(Long houseId);

	/**
	 *
	 * 功能描述: 查询指定楼盘期数下的id不是houseId的房号是否存在,存在返回HouseDomain,否则返回null
	 *
	 * @author 付湘辉
	 * Created on:2008-7-11
	 *
	 * 修改原因：
	 * @param projectId
	 * @param houseId
	 * @param houseNumber
	 * @return HouseDomain 返回结果
	 */
//	public HouseDomain getHouseDomainByHouseNumber(Long projectId,Long houseId,String houseNumber);

	/**
	    * 功能描述: 查询指定了房屋id的当前所使用的账户所在的房屋id <br>
	    * 当记账策略是合并记账时，若是指定的id是产权房id，则返回其管理房id，否则返回本身，
	    * 若是指定的id是管理房id，则返回本身 <br>
	    * @param houseId
	    * @return
	    *
	    * Create author:付湘辉 <br>
	    * Create on:2008-11-4  <br>
	    * Edit author:  <br>
	    * Edit on:    <br>
	    * Why:     <br>
	    */
	   public Long getEffectiveAccountHouseId(Long houseId);

	/**
	 * 功能描述:  查询指定楼栋的房屋总套数 <br>
	 * @param buildingId
	 * @return Integer
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-7-17  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public Integer getHouseCount(Long buildingId);

	/**
	 *
	 * 功能描述: 查询指定楼盘期数下的该房号是否存在,存在返回HouseDomain,否则返回null
	 *
	 * @author 付湘辉
	 * Created on:2008-7-11
	 *
	 * 修改原因：
	 * @param projectId
	 * @param houseNumber
	 * @return HouseDomain 返回结果
	 */
	public HouseDomain getHouseDomainByHouseNumber(Long projectId,String houseNumber);

	/**
	 *
	 * 功能描述: 查询指定的房号是否存在,存在返回HouseDomain,否则返回null
	 *
	 * @author 付湘辉
	 * Created on:2008-7-11
	 *
	 * 修改原因：
	 * @param houseNumber
	 * @return HouseDomain 返回结果
	 */
	public HouseDomain getHouseDomainByHouseNumber(String houseNumber);

	/**
	 *
	 * 功能描述: 查询指定房号的房间（查询范围包括管理房）,
	 * 存在返回HouseDomain,否则返回null
	 *
	 * @author 付湘辉
	 * Created on:2008-7-11
	 *
	 * 修改原因：
	 * @param houseNumber
	 * @param virtual 是否查询管理房　true：是　false：否
	 * @return HouseDomain 返回结果
	 */
	public HouseDomain getHouseDomainByHouseNumber(String houseNumber,boolean virtual);

	/**
	 * 功能描述:根据房间号模糊查询出其房间ID，如是管理房则是其下的产权房ID。返回值为id串，如1,2,3<br>
	 * @param houseNumber
	 * @return<br>
	 * Create author:罗军林<br>
	 * Create on:2008-10-15<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public String getHouseIdByNumber(String houseNumber);

	/**
	 *
	 * 功能描述: 根据楼栋id查询其下所有房屋的id列表信息
	 *
	 * @author 付湘辉
	 * Created on:2008-7-8
	 *
	 * 修改原因：
	 * @param buildingId
	 * @param meterTypeId TODO
	 * @return
	 * @return List<Long> 返回结果
	 */
	public List<Long> getHouseIdListByBuildingId(Long buildingId, Long meterTypeId);

	/**
	 * 功能描述:根据产权房id查询出其相关的产权房间ID，
	 * 如果没有合并，返回其本身，只查“双拼多拼”和“双拼(多拼)产权共有”的合并房
	 * 返回值为id串，如1,2,3<br>
	 * @param houseId
	 * @return<br>
	 * Create author:付湘辉<br>
	 * Create on:2008-10-15<br>
	 * Edit author:<br>
	 * Edit on:<br>
	 * Why:<br>
	 */
	public String getHouseIdsById(Long houseId);

	/**
		 * 功能描述: 获取指定楼栋下的所有房屋 <br>
		 * @param buildingId
		 * @return
		 *
		 * Create author:付湘辉 <br>
		 * Create on:2008-9-8  <br>
		 * Edit author:  <br>
		 * Edit on:    <br>
		 * Why:     <br>
		 */
		public List<FlatDomain> getHouseListByBuildingId(Long buildingId);

	/**
	    * 功能描述:返回房号ID列表中的houseDomain，仅查出房号ID，建筑面积、套内面积<br>
	    * @param houseIds
	    * @return<br>
	    * Create author:罗军林<br>
	    * Create on:2008-8-15<br>
	    * Edit author:<br>
	    * Edit on:<br>
	    * Why:<br>
	    */
	   public List<HouseDomain> getHouseListByIds(String houseIds);

	/**
	 * 功能描述: 获取指定楼栋下的所有绑定有效走表的房屋 <br>
	 * @param buildingId
	 * @return
	 *
	 * Create author:胡煦 <br>
	 * Create on:2008-10-8  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<Object[]> getHouseListHasByBuildingId(Long buildingId,String meterCode);

	/**
	 *
	 * 功能描述: 查询所有户型列表
	 *
	 * @author 付湘辉
	 * Created on:2008-6-30
	 *
	 * 修改原因：
	 * @return List<HousePlan> 返回结果
	 */
	public List<HousePlan> getHouseModels();

    /**
	 *
	 * 功能描述: 根据户型id查询户型实体对象
	 *
	 * @author 付湘辉
	 * Created on:2008-7-1
	 *
	 * 修改原因：
	 * @param housePlanId 户型id
	 * @return HousePlan 返回结果
	 */
	public HousePlan getHousePlanById(Long housePlanId);

   public List<Object[]> getHouseRCustomerInfo(String houseNumber);

   /**
 *
 * 功能描述: 根据ID查询房间类型
 *
 * @author 李昊龙
 * Created on:2008-10-14
 *
 * 修改原因：
 * @param houseTypeId
 * @return HouseType 返回结果
 */
public HouseType getHouseTypeById(Long houseTypeId);

   /**
 * 功能描述: 计算指定楼栋的住宅套数 <br>
 * @param buildingId
 * @return Integer
 *
 * Create author:付湘辉 <br>
 * Create on:2008-7-17  <br>
 * Edit author:  <br>
 * Edit on:    <br>
 * Why:     <br>
 */
public Integer getResiNumber(Long buildingId);

	/**
	 * 功能描述: 查询产权房屋，按楼栋编号、单元、楼层、房号从小到大排序 <br>
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2008-10-17  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<Object[]> queryALLHouseSorted();

	/**
	 *
	 * 功能描述: 根据楼栋id查询在这个楼栋下的不同状态的房间的数量列表<br>
	 * 在返回的list中是Object[]
	 * [0]：状态value <br>
	 * [1]：状态名称<br>
	 * [2]：状态数量<br>
	 *
	 * @author 付湘辉
	 * Created on:2008-7-3
	 *
	 * 修改原因：
	 * @param buildingId
	 * @return List
	 */
	public List queryDifferentStatusHouseCountBybuildingId(Long buildingId);

	/**
	 * 功能描述:查询指定所有ID房间列表  <br>
	 * @param houseIds
	 * @return
	 *
	 * Create author:付湘辉 <br>
	 * Create on:2009-1-13  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	public List<HouseDomain> queryHouseDomainListByIds(String houseIds);

	/**
	 *
	 * 功能描述: 根据房屋搜索VO条件，查询楼栋下房屋图示列表信息
	 * 注意：在返回的list中是Object[]<br>
	 * [0]：产权房id <br>
	 * [1]：楼层<br>
	 * [2]：管理房id<br>
	 * [3]：管理房号码<br>
	 * [4]：产权房号码<br>
	 * [5]：房屋状态<br>
	 * [6]：是否在装修中<br>
	 * @author 付湘辉
	 * Created on:2008-7-3
	 *
	 * 修改原因：
	 * @param searchVO
	 * @return List<Object[]> 返回结果
	 */
	public List<Object[]> queryHouseIconList(HouseSearchVO searchVO);
	
	/**
	 *
	 * 功能描述: 根据房屋搜索VO条件，查询楼栋下房屋列表分页信息
	 * 注意：在返回的page中resultList中是Object[] <br>
	 * [0]：产权房id <br>
	 * [1]：楼层<br>
	 * [2]：管理房id<br>
	 * [3]：管理房号码<br>
	 * [4]：产权房号码<br>
	 * [5]：产权房户型名称<br>
	 * [6]：建筑面积<br>
	 * [7]：套内面积<br>
	 * [8]：房屋状态<br>
	 * [9]：是否在装修中<br>
	 * @author 付湘辉
	 * Created on:2008-7-2
	 *
	 * 修改原因：
	 * @param searchVO
	 * @param currentPage
	 * @param pageSize
	 * @return Page 返回结果
	 */
	public Page queryPagedHouses(HouseSearchVO searchVO,Integer currentPage,Integer pageSize);
}
